core: In user mode checkouts of archives, use hard links
authorColin Walters <walters@verbum.org>
Thu, 15 Dec 2011 21:12:31 +0000 (16:12 -0500)
committerColin Walters <walters@verbum.org>
Thu, 15 Dec 2011 21:12:31 +0000 (16:12 -0500)
Now that we've done all the gyrations to separate content from
metadata in archives, we can just hard link when doing user checkouts.

src/libostree/ostree-repo.c
tests/t0000-basic.sh
tests/t0001-archive.sh

index b7f123e866fddb662ec8b90dbd440d635b42ad7c..e6ca38952122ced14959f9b04ee7a3988421fba9 100644 (file)
@@ -2262,7 +2262,18 @@ checkout_tree (OstreeRepo               *self,
         {
           const char *checksum = _ostree_repo_file_get_checksum ((OstreeRepoFile*)src_child);
 
-          if (priv->mode == OSTREE_REPO_MODE_ARCHIVE)
+          if (priv->mode == OSTREE_REPO_MODE_ARCHIVE && mode == OSTREE_REPO_CHECKOUT_MODE_USER)
+            {
+              g_clear_object (&object_path);
+              object_path = ostree_repo_get_object_path (self, checksum, OSTREE_OBJECT_TYPE_ARCHIVED_FILE_CONTENT);
+
+              if (link (ot_gfile_get_path_cached (object_path), ot_gfile_get_path_cached (dest_path)) < 0)
+                {
+                  ot_util_set_error_from_errno (error, errno);
+                  goto out;
+                }
+            }
+          else if (priv->mode == OSTREE_REPO_MODE_ARCHIVE)
             {
               ot_clear_gvariant (&archive_metadata);
               if (!ostree_repo_load_variant (self, OSTREE_OBJECT_TYPE_ARCHIVED_FILE_META, checksum, &archive_metadata, error))
index 02a060adf7c97ba8aa8a3a7725ee74246eecfa3b..e73631b9ac3fe43c522b749d17d754be599dec15 100755 (executable)
@@ -19,7 +19,7 @@
 
 set -e
 
-echo "1..17"
+echo "1..18"
 
 . libtest.sh
 
@@ -148,3 +148,6 @@ ostree --repo=repo2 checkout test2 test2-checkout-from-local-clone
 cd test2-checkout-from-local-clone
 assert_file_has_content yet/another/tree/green 'leaf'
 echo "ok local clone checkout"
+
+$OSTREE checkout -U test2 checkout-user-test2
+echo "ok user checkout"
index dc7bfa117fd1145fa3688150d814bfb42d6bf6a3..30fbe80c5d384f876837a62040e426f43f73d98e 100755 (executable)
@@ -21,7 +21,7 @@ set -e
 
 . libtest.sh
 
-echo '1..5'
+echo '1..6'
 
 setup_test_repository "archive"
 echo "ok setup"
@@ -47,3 +47,6 @@ ostree --repo=repo2 checkout test2 test2-checkout-from-local-clone
 cd test2-checkout-from-local-clone
 assert_file_has_content baz/cow moo
 echo "ok local clone checkout"
+
+$OSTREE checkout -U test2 checkout-user-test2
+echo "ok user checkout"